// 指定a的类型为never，那就意味着a以后不存在任何的数据了
let a: never;

// 以下对a的赋值都会有警告
// a = 1
// a = true
// a = undefined
// a = null

// 指定b的类型为string
let b:string
// 给b设置一个值
b = "hello"
if(typeof b === "string"){
  b.toUpperCase()
}else{
  console.log(b);
  // TypeScript会推断出此处的b是never，因为没有任何一值符合此处的逻辑
}
// & 同时满足
let c: string & number
// 此处c的类型是never


// 限制demo函数不需要任何返回值，任何值都不行，像undefined，null都不行
function demo():never{
  throw new Error("程序异常退出")
}